訊息鑑別碼其實有蠻多種類的,除了今天要介紹的『雜湊訊息鑑別碼 HMAC』之外:
還有單金鑰訊息鑑別碼 OMAC、加密訊息鑑別碼 CMAC 等等的。
那目前主流的用法都是 HMAC,中文稱呼雜湊訊息鑑別碼。
其實原理也不難理解就是了,等等我們就會拿來說說。
我們看一下 RFC 的定義
RFC2104 HMAC: Keyed-Hashing for Message Authentication
能看到一個重點公式:
HMAC(Key,Text) = Hash((Key XOR OPad) || Hash((Key XOR IPad) || Text))
結束……
好拉,我不能那麼隨便的就這樣敷衍,我必需要跟大家說說HMAC的一些原理跟應用。
HMAC其實就是利用Hash的高熵,來做認證。
JWT也就是利用HMAC來做驗證的。
可以設定一個Key,然後因為加入這個Key導致資料Hash摘要改變。
那要確定是我Server簽發的Token,可以把這份Token存起來。
但分散式的系統來說,來要去詢問儲存這份Token的Server。
那我好多台的Server共同約定一個Key,然後利用這個Key跟用戶基本資訊作跟Key做HMAC後放放到資料的最後面。
整個結構大約長:
Base64(規格).Base64(用戶基本資訊(無隱密資訊,加入時間戳跟到期時間等)).HMAC(Key,戶基本資訊)
當分散式的系統要驗證是否是由相同系統所發出的,除了檢查時間到期跟基本驗證資訊之外,Server可以把Base64的用戶基本資訊做HMAC。
因為是系統共同擁有的Key,應該HMAC出來必需要跟最後的資料相符合,要是不符合就是偽造。
而因為第三者不知道Key,無法簽發出偽造的資料。
大家可以去官網看一下、玩一下~
其實除了HMAC之外,還能把其他密碼學相關的資訊拿來用。
第一個就是加密了,把Hash函數換成加密的。
還有非對稱的方法,就是把『用戶基本資訊』做非對稱加密,而認證的時候就是將加密後的資料做解密。
如果能還原並完全比對,就是由共同Server簽發的。
說真的這章真的超水的,但又不得不介紹。
如果跟SHA或其他的Hash放在一起顯得有點不倫不類。
所以我只能把這章獨立分出來,但HMAC又是沒什麼很難的內容。
導致這樣的文章出現……
也順便把JWT也給介紹了一下,而自己也可以使用HMAC的特性來做一些功能。
下一章也很水,跟大家聊聊加密的差異與方法。
感覺起來越後面越水的感覺……希望是錯覺。
RFC2104 HMAC: Keyed-Hashing for Message Authentication